﻿
namespace ZJUDTS.Web
{
	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.ComponentModel.DataAnnotations;
	using System.Data;
	using System.Linq;
	using System.ServiceModel.DomainServices.EntityFramework;
	using System.ServiceModel.DomainServices.Hosting;
	using System.ServiceModel.DomainServices.Server;


	// 使用 ZJUDTSContainer 上下文实现应用程序逻辑。
	// TODO: 将应用程序逻辑添加到这些方法中或其他方法中。
	// TODO: 连接身份验证(Windows/ASP.NET Forms)并取消注释以下内容，以禁用匿名访问
	//还可考虑添加角色，以根据需要限制访问。
	// [RequiresAuthentication]
	[EnableClientAccess()]
	public class ZJUDTS2DomainService : LinqToEntitiesDomainService<ZJUDTSContainer>
	{

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“AchievementSet”查询添加顺序。
		public IQueryable<Achievement> GetAchievementSet()
		{
			return this.ObjectContext.AchievementSet;
		}

		public void InsertAchievement(Achievement achievement)
		{
			if ((achievement.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(achievement, EntityState.Added);
			}
			else
			{
				this.ObjectContext.AchievementSet.AddObject(achievement);
			}
		}

		public void UpdateAchievement(Achievement currentAchievement)
		{
			this.ObjectContext.AchievementSet.AttachAsModified(currentAchievement, this.ChangeSet.GetOriginal(currentAchievement));
		}

		public void DeleteAchievement(Achievement achievement)
		{
			if ((achievement.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(achievement, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.AchievementSet.Attach(achievement);
				this.ObjectContext.AchievementSet.DeleteObject(achievement);
			}
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“CompositeSet”查询添加顺序。
		public IQueryable<Composite> GetCompositeSet()
		{
			return this.ObjectContext.CompositeSet;
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“EventSet”查询添加顺序。
		public IQueryable<Event> GetEventSet()
		{
			return this.ObjectContext.EventSet;
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“ItemSet”查询添加顺序。
		public IQueryable<Item> GetItemSet()
		{
			return this.ObjectContext.ItemSet;
		}

		public void InsertItem(Item item)
		{
			if ((item.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Added);
			}
			else
			{
				this.ObjectContext.ItemSet.AddObject(item);
			}
		}

		public void UpdateItem(Item currentItem)
		{
			this.ObjectContext.ItemSet.AttachAsModified(currentItem, this.ChangeSet.GetOriginal(currentItem));
		}

		public void DeleteItem(Item item)
		{
			if ((item.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.ItemSet.Attach(item);
				this.ObjectContext.ItemSet.DeleteObject(item);
			}
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“LocationSet”查询添加顺序。
		public IQueryable<Location> GetLocationSet()
		{
			return this.ObjectContext.LocationSet;
		}

		public void InsertLocation(Location location)
		{
			if ((location.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(location, EntityState.Added);
			}
			else
			{
				this.ObjectContext.LocationSet.AddObject(location);
			}
		}

		public void UpdateLocation(Location currentLocation)
		{
			this.ObjectContext.LocationSet.AttachAsModified(currentLocation, this.ChangeSet.GetOriginal(currentLocation));
		}

		public void DeleteLocation(Location location)
		{
			if ((location.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(location, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.LocationSet.Attach(location);
				this.ObjectContext.LocationSet.DeleteObject(location);
			}
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“PracticeSet”查询添加顺序。
		public IQueryable<Practice> GetPracticeSet()
		{
			return this.ObjectContext.PracticeSet;
		}

		public void InsertPractice(Practice practice)
		{
			if ((practice.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(practice, EntityState.Added);
			}
			else
			{
				this.ObjectContext.PracticeSet.AddObject(practice);
			}
		}

		public void UpdatePractice(Practice currentPractice)
		{
			this.ObjectContext.PracticeSet.AttachAsModified(currentPractice, this.ChangeSet.GetOriginal(currentPractice));
		}

		public void DeletePractice(Practice practice)
		{
			if ((practice.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(practice, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.PracticeSet.Attach(practice);
				this.ObjectContext.PracticeSet.DeleteObject(practice);
			}
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“RoleSet”查询添加顺序。
		public IQueryable<Role> GetRoleSet()
		{
			return this.ObjectContext.RoleSet;
		}

		public void InsertRole(Role role)
		{
			if ((role.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(role, EntityState.Added);
			}
			else
			{
				this.ObjectContext.RoleSet.AddObject(role);
			}
		}

		public void UpdateRole(Role currentRole)
		{
			this.ObjectContext.RoleSet.AttachAsModified(currentRole, this.ChangeSet.GetOriginal(currentRole));
		}

		public void DeleteRole(Role role)
		{
			if ((role.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(role, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.RoleSet.Attach(role);
				this.ObjectContext.RoleSet.DeleteObject(role);
			}
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“SkillSet”查询添加顺序。
		public IQueryable<Skill> GetSkillSet()
		{
			return this.ObjectContext.SkillSet;
		}

		public void InsertSkill(Skill skill)
		{
			if ((skill.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(skill, EntityState.Added);
			}
			else
			{
				this.ObjectContext.SkillSet.AddObject(skill);
			}
		}

		public void UpdateSkill(Skill currentSkill)
		{
			this.ObjectContext.SkillSet.AttachAsModified(currentSkill, this.ChangeSet.GetOriginal(currentSkill));
		}

		public void DeleteSkill(Skill skill)
		{
			if ((skill.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(skill, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.SkillSet.Attach(skill);
				this.ObjectContext.SkillSet.DeleteObject(skill);
			}
		}

		// TODO:
		// 考虑约束查询方法的结果。如果需要其他输入，
		//可向此方法添加参数或创建具有不同名称的其他查询方法。
		// 为支持分页，需要向“UserSet”查询添加顺序。
		public IQueryable<User> GetUserSet()
		{
			return this.ObjectContext.UserSet;
		}
		public User GetUserbyName(String Name)
		{
			return this.ObjectContext.UserSet.FirstOrDefault(u => u.Name == Name);
	
		}
		public void InsertUser(User user)
		{
			if ((user.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(user, EntityState.Added);
			}
			else
			{
				this.ObjectContext.UserSet.AddObject(user);
			}
		}

		public void UpdateUser(User currentUser)
		{
			this.ObjectContext.UserSet.AttachAsModified(currentUser, this.ChangeSet.GetOriginal(currentUser));
		}

		public void DeleteUser(User user)
		{
			if ((user.EntityState != EntityState.Detached))
			{
				this.ObjectContext.ObjectStateManager.ChangeObjectState(user, EntityState.Deleted);
			}
			else
			{
				this.ObjectContext.UserSet.Attach(user);
				this.ObjectContext.UserSet.DeleteObject(user);
			}
		}
	
		
	}
}


